package 队列;

/* https://leetcode-cn.com/problems/implement-queue-using-stacks/ */

import java.util.Stack;

public class _232_用栈实现队列 {

    // 解题思路：用两个栈来实现，一个inStack用来添加新的元素，outStack用来取得新元素

    class MyQueue {
        // new两个栈对象
        Stack<Integer> inStack = new Stack<>();
        Stack<Integer> outStack = new Stack<>();

        // 构造函数，因为上面直接new了两个栈对象，所以构造函数可以不写，要写的话也是在里面new两个栈对象
        public MyQueue() {

        }

        // push方法，往inStack里面添加新元素
        public void push(int x) {
            inStack.push(x);
        }

        // pop方法，当outStack为空的时候，把inStack里的元素全部转移到outStack里面，此时outStack最后面的元素就是inStack第一个元素，
        // 直接用pop删除
        public int pop() {
            if (outStack.isEmpty()){
                while(!inStack.isEmpty()){
                    outStack.push(inStack.pop());
                }
            }
            return outStack.pop();
        }

        // peek方法，跟pop方法一样先把inStack里的元素放在outStack，然后直接返回最上面的元素，也就是outStack.peek（）
        public int peek() {
            if (outStack.isEmpty()){
                while(!inStack.isEmpty()){
                    outStack.push(inStack.pop());
                }
            }
            return outStack.peek();
        }

        // 判断队列是否为空，如果inStack和outStack同时为空，那么队列才为空
        public boolean empty() {
            return inStack.isEmpty() && outStack.isEmpty();
        }
    }
}
